import gsApi from '@/api/gsApi';

export default class DataManager{
  // 地图列表
  mapList = new Array();

  // 手画定点列表
  positionList=new Array();
  // 手画定点名列表
  positionNameList=new Array();

  //实时位置
  loadPoint = new Array();

  // 手画定点数组 哈希表： graphName -> points[ ]
  // 用于将定点对象与定点名一一映射
  positionMap=new Map();

  // 当前的数据指向
  current={
    mapName:'',
    location:'',
    positionName:'',
    scanMap:'',
  }

  /**
   * 空构造函数
   */
  constructor(){

  }

  /**
   * 加载地图列表
   */
  async loadMaps(){
    const res=await gsApi.getMapList()
    this.mapList=res.data.data;

  }

  async location(){
    const res=await gsApi.getLocation()
    this.loadPoint=res.data;
    // console.log(this.currentPosition);
  }


  async scanMap(){
    const res=await gsApi.getScanMap()
    this.scanMap=res.data;
    // console.log(this.currentPosition);
  }


  /**
   * 
   * 根据地图名称，加载该地图的定点列表
   * @param mapName
   * 
   */
  async loadPositions(mapName){
    // 加载哪张地图手画路径，就设为当前地图
    this.current.mapName = mapName;
    const res= await gsApi.getPositionsByMapName(mapName)
    // 这里需要等数据加载完再赋值
    this.positionList=res.data.data;
    // 根据原生返回数据，解析成程序要用的数据存放
    this.__parseData(this.positionList);

  }

  /**
   * 解析http返回的数据，再装载
   * @param positionList
   */
  __parseData(positionList){
    this.positionMap.clear();
    this.positionNameList=[];
    positionList.forEach(p=>{
      // 添加点集合
      const position=p;
      //将positionList中的每个position对象和他们的名字映射起来，便于通过名字查找
      //虽然这种写法很啰嗦，但是好像也没有别的办法
      this.positionMap.set(p.name, p);
      this.positionNameList.push(position.name);
    })
    console.log(this.positionMap);
  }
}
